<script>
	import Vue from 'vue'
	import TIM from 'tim-wx-sdk';
	import {
		genTestUserSig
	} from './debug/GenerateTestUserSig.js';
	// 首先需要通过 uni.requireNativePlugin("ModuleName") 获取 module
	// #ifndef H5
	const TUICallKit = uni.requireNativePlugin('TencentCloud-TUICallKit');
	// console.error(TUICallKit, 'TencentCloud-TUICallKit ｜ ok');
	const TUICallKitEvent = uni.requireNativePlugin('globalEvent');
	const TUICallEngine = uni.requireNativePlugin('TencentCloud-TUICallKit-TUICallEngine');
	// #endif
	var iosSessionId = 0;
	export default {
		globalData: {
			SDKAppID : genTestUserSig('').sdkAppID,
			userID: '',
			userSig: ''
		},
		onLaunch: function() {
			// 重点注意： 为了 uni-app 更好地接入使用 tim，快速定位和解决问题，请勿修改 uni.$TUIKit 命名。
			// 如果您已经接入 tim ，请将 uni.tim 修改为 uni.$TUIKit。
			// #ifndef H5
			uni.$TUIKit = TIM.create({
				SDKAppID: this.globalData.SDKAppID
			});
			uni.$TIM = TIM;
			// 将原生插件挂载在 uni 上
			uni.$TUICallKit = TUICallKit;
			uni.$TUICallKitEvent = TUICallKitEvent;
			uni.$TUICallEngine = TUICallEngine;

			// 添加监听事件
			// 通话状态监听
			TUICallKitEvent.addEventListener('onUserReject', (res) => {
			  console.log('用户拒绝通话', JSON.stringify(res));
			  console.log('用户拒绝通话', JSON.stringify(res));
			 	uni.$emit('onUserReject',{msg:'对方拒绝通话'})
			});
			TUICallKitEvent.addEventListener('onError', (res) => {
				console.log('onError', JSON.stringify(res));
			});
			TUICallKitEvent.addEventListener('onCallReceived', (res) => {
				console.log('onCallReceived', JSON.stringify(res));
			});
			TUICallKitEvent.addEventListener('onCallCancelled', (res) => {
				console.log('onCallCancelled', res);
			});
			TUICallKitEvent.addEventListener('onCallBegin', (res) => {
				console.log('onCallBegin', JSON.stringify(res));
				uni.setStorageSync("callRole",res.callRole)
				console.log('通话开始', JSON.stringify(res.callRole));
			});
			TUICallKitEvent.addEventListener('onCallEnd', (res) => {
				console.log('通话结束', JSON.stringify(res));
				if(uni.getStorageSync("callRole")  == 1){
					uni.$emit('onCallEnd',{msg:'通话结束，通话时间：'+res.totalTime +'秒'})
				}
			});
			

			// IM监听
			uni.$TUIKit.on(TIM.EVENT.ERROR, function(event) {
				console.log(event, '收到 SDK 发生错误通知')
				// 收到 SDK 发生错误通知，可以获取错误码和错误信息
				// event.name - TIM.EVENT.ERROR
				// event.data.code - 错误码
				// event.data.message - 错误信息
			});

			uni.$TUIKit.on(TIM.EVENT.SDK_NOT_READY, function(event) {
				console.log(event, '收到 SDK 进入 not ready 状态通知')
				// 收到 SDK 进入 not ready 状态通知，此时 SDK 无法正常工作
				// event.name - TIM.EVENT.SDK_NOT_READY
			})

			uni.$TUIKit.on(TIM.EVENT.NET_STATE_CHANGE, function(event) {
				console.log(event, '网络状态发生改变')
				// 网络状态发生改变（v2.5.0 起支持）
				// event.name - TIM.EVENT.NET_STATE_CHANGE
				// event.data.state 当前网络状态，枚举值及说明如下：
				//   - TIM.TYPES.NET_STATE_CONNECTED - 已接入网络
				//   - TIM.TYPES.NET_STATE_CONNECTING - 连接中。很可能遇到网络抖动，SDK 在重试。接入侧可根据此状态提示“当前网络不稳定”或“连接中”
				//   - TIM.TYPES.NET_STATE_DISCONNECTED - 未接入网络。接入侧可根据此状态提示“当前网络不可用”。SDK 仍会继续重试，若用户网络恢复，SDK 会自动同步消息
			});

			uni.$TUIKit.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, function(event) {
				let badge = 0
				for (let i in event.data) {
					badge += event.data[i].unreadCount
				}
				// badeg为未读消息总数,可用于设置角标...
				console.log(event, '收到会话列表更新通知')
				// 收到会话列表更新通知，可通过遍历 event.data 获取会话列表数据并渲染到页面
				// event.name - TIM.EVENT.CONVERSATION_LIST_UPDATED
				// event.data - 存储 Conversation 对象的数组 - [Conversation]
			});

			// 监听事件，如：
			uni.$TUIKit.on(TIM.EVENT.SDK_READY, function(event) {
				console.log(event, ' 收到离线消息和会话列表同步完毕通知')
				// 收到离线消息和会话列表同步完毕通知，接入侧可以调用 sendMessage 等需要鉴权的接口
				// event.name - TIM.EVENT.SDK_READY
			});
			// #endif

			//uni.$TUIKit.on(TIM.EVENT.MESSAGE_RECEIVED, this.onReceiveMessage);
			// 收到推送的单聊、群聊、群提示、群系统通知的新消息，可通过遍历 event.data 获取消息列表数据并渲染到页面
			// event.name - TIM.EVENT.MESSAGE_RECEIVED
			// event.data - 存储 Message 对象的数组 - [Message]
			// 如果已登录并且能获取到用户id
			if (uni.getStorageSync('token') && this.globalData.userID) {
				console.log(uni.getStorageSync('token'), this.globalData.userID);
				// 登录腾讯IM
				// #ifndef H5
				uni.$TUIKit.login({
					userID: this.globalData.userID,
					userSig: this.globalData.userSig,
				})
				uni.$TUICallKit.login({
					SDKAppID: this.globalData.SDKAppID,
					userID: this.globalData.userID,
					userSig: this.globalData.userSig,
				}, (res) => {
					if (res.code === 0) {
						// 开启悬浮窗
						uni.$TUICallKit.enableFloatWindow(true);
					} else {
						console.error('login failed, failed message = ', res.msg);
					}
				});
				// #endif
				// 如果设置的是手动关闭启动图则打开下方注释
				// plus.navigator.closeSplashscreen()
			} else {
				uni.reLaunch({
					url: '/pages/login/login',
					success: () => {
						// 如果设置的是手动关闭启动图则打开下方注释
						// plus.navigator.closeSplashscreen()
					}
				})
			}



			var that = this

			// #ifdef APP-PLUS
			plus.push.addEventListener('click', function(msg) {
				// console.log('用户点击了', msg)
				// 安卓离线通知被点击可能会触发两次click,第一次的msg.payload为莫名obj
				if ((msg.payload && Object.prototype.toString.call(msg.payload) !== '[object Object]') ||
					iosSessionId) {
					let messageShow = () => {
						let sessionId = (iosSessionId ? iosSessionId : msg.payload)
						if (parseInt(sessionId) == 0) {
							uni.switchTab({
								url: '/pages/message/message'
							})
							return;
						}
						uni.navigateTo({
							url: '/pages/session-info/session-info?id=' + sessionId
						})
					}
					let pages = getCurrentPages(),
						page = pages[pages.length - 1]
					if (page && page.route == 'pages/message/message') {
						messageShow()
					} else {
						that.ws.messageReady = messageShow
					}
				}
			}, false)

			let platform = that.ws.userPlatform ? that.ws.userPlatform : uni.getSystemInfoSync().platform
			if (platform == 'ios') {
				plus.push.addEventListener("receive", function(msg) {
					if ('ignore' == msg.payload) {

					} else {
						//接收透传消息
						iosSessionId = msg.payload;
						plus.push.createMessage(msg.content, 'ignore', {
							title: msg.title,
							cover: false
						});
					}
				}, false);
			}
			// #endif

			uni.onNetworkStatusChange(function(res) {
				if (res.isConnected) {
					const userinfo = uni.getStorageSync('userinfo');
					if (userinfo) {
						that.ws.init(userinfo.token, userinfo.auth_token)
					}
				} else {
					that.ws.socketTask.close()
					that.ws.socketOpen = false
					that.ws.checkNetwork()
				}
			});
		},
		onShow: function(query) {
			// #ifdef APP-PLUS
			plus.runtime.setBadgeNumber(0);
			// #endif
			if (query.path != 'pages/center/login' && query.path != 'pages/center/register') {
				this.ws.pageRefresh.message = true
				this.ws.pageRefresh.sessionInfo = true
				this.checkLogin()
			}
		},
		methods: {
			checkLogin: function() {
				const userinfo = uni.getStorageSync('userinfo');
				var valid = true;
				if (!userinfo || !userinfo.token) {
					valid = false;
				} else {
					let token = userinfo.token.split('|');
					let time = Date.parse(new Date()).toString();
					time = time.substr(0, 10);
					// 减去一秒,防止刚好到时间造成发送了错误的请求
					if ((parseInt(token[2]) - 2) < parseInt(time)) {
						valid = false;
					}
				}

				if (!valid) {
					setTimeout(() => {
						this.ws.logout()
					}, 300)
				} else {
					this.ws.init(userinfo.token, userinfo.auth_token)
				}
			}
		}
	}
</script>

<style lang="scss">
	@import "uview-ui/index.scss";

	.user-status-0 {
		color: $--gray !important;
	}

	.user-status-1 {
		color: #21E589 !important;
	}

	.user-status-2 {
		color: #FF647E !important;
	}

	.user-status-3 {
		color: #FF9C4E !important;
	}

	.im-data-none {
		display: block;
		line-height: 100rpx;
		text-align: center;
		font-size: 28rpx;
		color: $--gray;
	}
</style>